Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asymmetric line flow (Refined); READY FOR REVIEW !!! #789

Open
wants to merge 25 commits into
base: develop
Choose a base branch
from

Conversation

sambuddhac
Copy link
Collaborator

@sambuddhac sambuddhac commented Nov 13, 2024

Description

This PR attempts to introduce bidirectional asymmetric transmission lines into the system. Such lines have different values of MW flow limits, loss percentage, and capacity expansion limits along the two directions. While doing so, this PR also ensures that there are also symmetric lines present in the system along with the asymmetric lines and modifies the code in such a way that backwards compatibility is maintained with the existing cases.

What type of PR is this? (check all applicable)

  • Feature
  • Bug Fix
  • Documentation Update
  • Code Refactor
  • Performance Improvements

Related Tickets & Documents

Checklist

  • Code changes are sufficiently documented; i.e. new functions contain docstrings and .md files under /docs/src have been updated if necessary.
  • The latest changes on the target branch have been incorporated, so that any conflicts are taken care of before merging. This can be accomplished either by merging in the target branch (e.g. 'git merge develop') or by rebasing on top of the target branch (e.g. 'git rebase develop'). Please do not hesitate to reach out to the GenX development team if you need help with this.
  • Code has been tested to ensure all functionality works as intended.
  • CHANGELOG.md has been updated (if this is a 'notable' change).
  • I consent to the release of this PR's code under the GNU General Public license.

How this can be tested

Post-approval checklist for GenX core developers

After the PR is approved

  • Check that the latest changes on the target branch are incorporated, either via merge or rebase
  • Remember to squash and merge if incorporating into develop

"ObjScale" => 1)
"ObjScale" => 1,
"asymmetrical_trans_flow_limit" => 0
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
)
)

L = length(as_vector(:Network_Lines))
inputs_nw["L"] = L
L_asym = 0 # Default number of asymmetrical lines
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
L_asym = 0 # Default number of asymmetrical lines
L_asym = 0 # Default number of asymmetrical lines

@lbonaldo lbonaldo added the enhancement New feature or request label Dec 3, 2024
@lbonaldo lbonaldo force-pushed the asymmetric_line_flow branch from 0002caf to 0e224c5 Compare December 3, 2024 23:31
@lbonaldo lbonaldo added this to the v0.4.2 milestone Dec 4, 2024
for i in 1:L
if i in inputs["EXPANSION_LINES"]
transcap[i] = value.(EP[:vNEW_TRANS_CAP][i])
elseif i in inputs["EXPANSION_LINES_ASYM"]
transcap_pos[i] = value.(EP[:vNEW_TRANS_CAP_Pos][i])
transcap_neg[i] = value.(EP[:vNEW_TRANS_CAP_Neg][i])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
transcap_neg[i] = value.(EP[:vNEW_TRANS_CAP_Neg][i])
transcap_neg[i] = value.(EP[:vNEW_TRANS_CAP_Neg][i])

…t partitioning of symmetric and asymmetric rows on network dataframe and introducing additional associated decision variables into the code-base
@sambuddhac sambuddhac changed the title Asymmetric line flow (Refined) #Work in Progress; DO NOT MERGE YET !!! Asymmetric line flow (Refined) #Work in Progress; READY FOR REVIEW !!! Dec 17, 2024
@sambuddhac
Copy link
Collaborator Author

sambuddhac commented Dec 17, 2024

Hi @JesseJenkins and @lbonaldo , I have pushed all the modifications to the code base for this PR. Few things to note: First of all, as you will see, it's way more lengthy and complicated than what Jesse suggested to me previously. I first tried with the simpler version. But, was getting bidirectional flows on the asymmetric lines with Qian's example case even when we restricted the flow limits to zero in one of the directions for the asymmetric lines.

With some pondering, I realized that I was doing wrong indexing on the constraints and decision variables. So, I had to do a bit more digging and refining the code. The fundamental reasons for which the code is so much lengthier are: 1) I have both symmetric as well as asymmetric lines in a system and 2) In order to maintain backward compatibility with the existing example cases (As you will observe, I had to go to lengths to split the data-frame into two parts and assign separate variables and constraint names so that things stay clean and correct. I could not find an easier way to do this. I'll highly appreciate any feedback on this).

We tested with @qluo0320github 's example cases and it seems the results are sensible (?) However, I still get discrepancies when I benchmark against an actually symmetric system versus a "simulated" symmetric system (in which the asymmetric lines have the same flow limits, loss percentages, and transmission buildout in both directions). I am attaching hereby all the relevant flow comparison
Flow_Comparisons.xlsx
result file (the names should be self-explanatory) here for you to take a look.

I scrutinized the code several times, but couldn't spot any flaw so far. I would appreciate if you could point some obvious bug (if at all) that I might have missed. Also, I would appreciate taking a look at the quadratic loss formulation. I believe I did it right, but am not totally certain. Thank you so much !!! I have also updated most of the doc pages; I will wrap up parts of the transmission.jl doc page and make another push to close this.

@sambuddhac sambuddhac marked this pull request as ready for review December 17, 2024 15:02
@sambuddhac sambuddhac changed the title Asymmetric line flow (Refined) #Work in Progress; READY FOR REVIEW !!! Asymmetric line flow (Refined); READY FOR REVIEW !!! Dec 18, 2024
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

JuliaFormatter

[JuliaFormatter] reported by reviewdog 🐶

if setup["asymmetrical_trans_flow_limit"] ==1


[JuliaFormatter] reported by reviewdog 🐶

cMaxFlow_out_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] <= EP[:eAvail_Trans_Cap_Pos][l] #Change these with Auxiliary
cMaxFlow_in_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] >= -EP[:eAvail_Trans_Cap_Neg][l] #Change these with Auxiliary


[JuliaFormatter] reported by reviewdog 🐶

begin
cMaxFlow_out[l = 1:L, t = 1:T], vFLOW[l, t] <= EP[:eAvail_Trans_Cap][l]
cMaxFlow_in[l = 1:L, t = 1:T], vFLOW[l, t] >= -EP[:eAvail_Trans_Cap][l]
end)


[JuliaFormatter] reported by reviewdog 🐶


[JuliaFormatter] reported by reviewdog 🐶

if setup["asymmetrical_trans_flow_limit"] ==1


[JuliaFormatter] reported by reviewdog 🐶

inputs["pPercent_Loss_Pos"][l] * (vTAUX_POS_ASYM[l, t]) + inputs["pPercent_Loss_Neg"][l] * (vTAUX_NEG_ASYM[l, t])


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_POS_ASYM[l, t] - vTAUX_NEG_ASYM[l, t] == vFLOW[(l+L_sym), t]


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_POS_ASYM[l, t] + vTAUX_NEG_ASYM[l, t] <= min(EP[:eAvail_Trans_Cap_Pos][l], EP[:eAvail_Trans_Cap_Neg][l])


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_NEG[l, t] <= EP[:eAvail_Trans_Cap][l] - vPROD_TRANSCAP_ON[l, t]


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_NEG_ASYM[l, t] <= EP[:eAvail_Trans_Cap_Neg][l] - vPROD_TRANSCAP_ON_NEG_ASYM[l, t]


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_POS_ASYM[l, t] <= EP[:eAvail_Trans_Cap_Pos][l] - vPROD_TRANSCAP_ON_POS_ASYM[l, t]


[JuliaFormatter] reported by reviewdog 🐶

(1 - vTAUX_POS_ON_POS_ASYM[l, t]) * inputs["pTrans_Max_Possible_Pos"][l]


[JuliaFormatter] reported by reviewdog 🐶

(1 - vTAUX_POS_ON_NEG_ASYM[l, t]) * inputs["pTrans_Max_Possible_Neg"][l]


[JuliaFormatter] reported by reviewdog 🐶

vTAUX_NEG[l, t] <= EP[:eAvail_Trans_Cap][l] - vPROD_TRANSCAP_ON[l, t]


[JuliaFormatter] reported by reviewdog 🐶

if setup["asymmetrical_trans_flow_limit"] ==1


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS)) +


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS)))


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_POS[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderPos2[l in LOSS_LINES_SYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg2[l in LOSS_LINES_SYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible_Pos"][l] / TRANS_LOSS_SEGS) *
vTAUX_POS_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS)) +


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible_Neg"][l] / TRANS_LOSS_SEGS) *
vTAUX_NEG_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS)))


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_POS_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_POS_ASYM[l, 0, t] ==
vFLOW[(l+L_sym), t]


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_NEG_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG_ASYM[l, 0, t] ==
-vFLOW[(l+L_sym), t]


[JuliaFormatter] reported by reviewdog 🐶

cTAuxMaxNeg_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderPos1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderPos2_asym[l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg2_asym[l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

inputs["pTrans_Max_Possible_Pos"][l] * (1 - vTAUX_POS_ON_ASYM[l, 1, t])


[JuliaFormatter] reported by reviewdog 🐶

inputs["pTrans_Max_Possible_Neg"][l] * (1 - vTAUX_NEG_ON_ASYM[l, 1, t])


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS)) +


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS)))


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_POS[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderPos2[l in LOSS_LINES, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg2[l in LOSS_LINES, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


# Transmission capacity of the network (in MW) & Maximum possible flow after reinforcement for use in linear segments of piecewise approximation
if setup["asymmetrical_trans_flow_limit"] == 1
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = convert(Array{Float64}, filtered_vector_sym(network_var, :Asymmetrical, :Line_Max_Flow_MW)) / scale_factor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = convert(Array{Float64}, filtered_vector_sym(network_var, :Asymmetrical, :Line_Max_Flow_MW)) / scale_factor
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = convert(
Array{Float64},
filtered_vector_sym(network_var, :Asymmetrical, :Line_Max_Flow_MW)) /
scale_factor

if setup["asymmetrical_trans_flow_limit"] == 1
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = convert(Array{Float64}, filtered_vector_sym(network_var, :Asymmetrical, :Line_Max_Flow_MW)) / scale_factor
# Transmission capacity of the network for asymmetrical lines; onward direction (in MW)
inputs_nw["pTrans_Max_Possible_Pos"] = inputs_nw["pTrans_Max_Pos"] = convert(Array{Float64}, filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW))/ scale_factor # convert to GW
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
inputs_nw["pTrans_Max_Possible_Pos"] = inputs_nw["pTrans_Max_Pos"] = convert(Array{Float64}, filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW))/ scale_factor # convert to GW
inputs_nw["pTrans_Max_Possible_Pos"] = inputs_nw["pTrans_Max_Pos"] = convert(
Array{Float64},
filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW)) / scale_factor # convert to GW


# Transmission capacity of the network for asymmetrical lines; return direction(in MW)
inputs_nw["pTrans_Max_Possible_Neg"] = inputs_nw["pTrans_Max_Neg"] = convert(Array{Float64}, filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW_Neg)) / scale_factor # convert to GW
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
inputs_nw["pTrans_Max_Possible_Neg"] = inputs_nw["pTrans_Max_Neg"] = convert(Array{Float64}, filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW_Neg)) / scale_factor # convert to GW
inputs_nw["pTrans_Max_Possible_Neg"] = inputs_nw["pTrans_Max_Neg"] = convert(
Array{Float64},
filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW_Neg)) /
scale_factor # convert to GW

# Transmission capacity of the network for asymmetrical lines; return direction(in MW)
inputs_nw["pTrans_Max_Possible_Neg"] = inputs_nw["pTrans_Max_Neg"] = convert(Array{Float64}, filtered_vector(network_var, :Asymmetrical, :Line_Max_Flow_MW_Neg)) / scale_factor # convert to GW
else
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = to_floats(:Line_Max_Flow_MW) / scale_factor # convert to GW
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = to_floats(:Line_Max_Flow_MW) / scale_factor # convert to GW
inputs_nw["pTrans_Max_Possible"] = inputs_nw["pTrans_Max"] = to_floats(:Line_Max_Flow_MW) /
scale_factor # convert to GW

if setup["Trans_Loss_Segments"] == 1
# Line percentage Loss - valid for case when modeling losses as a fixed percent of absolute value of power flows
inputs_nw["pPercent_Loss"] = to_floats(:Line_Loss_Percentage)
if setup["asymmetrical_trans_flow_limit"] == 1
inputs_nw["pTrans_Loss_Coef"] = inputs_nw["pPercent_Loss"] = convert(Array{Float64}, filtered_vector_sym(network_var, :Asymmetrical, :Line_Loss_Percentage))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
inputs_nw["pTrans_Loss_Coef"] = inputs_nw["pPercent_Loss"] = convert(Array{Float64}, filtered_vector_sym(network_var, :Asymmetrical, :Line_Loss_Percentage))
inputs_nw["pTrans_Loss_Coef"] = inputs_nw["pPercent_Loss"] = convert(
Array{Float64},
filtered_vector_sym(network_var, :Asymmetrical, :Line_Loss_Percentage))

@constraint(EP, cExistingTransCapPos[l = 1:L_asym], vTRANSMAX_Pos[l]==inputs["pTrans_Max_Pos"][l])
@constraint(EP, cExistingTransCapNeg[l = 1:L_asym], vTRANSMAX_Neg[l]==inputs["pTrans_Max_Neg"][l])
else
@constraint(EP, cExistingTransCap[l = 1:L], vTRANSMAX[l]==inputs["pTrans_Max"][l])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
@constraint(EP, cExistingTransCap[l = 1:L], vTRANSMAX[l]==inputs["pTrans_Max"][l])
@constraint(EP, cExistingTransCap[l = 1:L],
vTRANSMAX[l]==inputs["pTrans_Max"][l])

Comment on lines +208 to +222
if setup["asymmetrical_trans_flow_limit"] == 1
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
@constraint(EP,
cMaxFlowPossible_Pos[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Pos[l]<=inputs["pTrans_Max_Possible_Pos"][l])
@constraint(EP,
cMaxFlowPossible_Neg[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Neg[l]<=inputs["pTrans_Max_Possible_Neg"][l])
else
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
if setup["asymmetrical_trans_flow_limit"] == 1
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
@constraint(EP,
cMaxFlowPossible_Pos[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Pos[l]<=inputs["pTrans_Max_Possible_Pos"][l])
@constraint(EP,
cMaxFlowPossible_Neg[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Neg[l]<=inputs["pTrans_Max_Possible_Neg"][l])
else
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
end
if setup["asymmetrical_trans_flow_limit"] == 1
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
@constraint(EP,
cMaxFlowPossible_Pos[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Pos[l]<=inputs["pTrans_Max_Possible_Pos"][l])
@constraint(EP,
cMaxFlowPossible_Neg[l in EXPANSION_LINES_ASYM],
eAvail_Trans_Cap_Neg[l]<=inputs["pTrans_Max_Possible_Neg"][l])
else
@constraint(EP,
cMaxFlowPossible[l in EXPANSION_LINES],
eAvail_Trans_Cap[l]<=inputs["pTrans_Max_Possible"][l])
end

end
#END network expansion contraints

end
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
end
end

Comment on lines +190 to +191
@variable(EP, vTAUX_NEG_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)
@variable(EP, vTAUX_POS_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
@variable(EP, vTAUX_NEG_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)
@variable(EP, vTAUX_POS_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)
@variable(EP,
vTAUX_NEG_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)
@variable(EP,
vTAUX_POS_ASYM[l in LOSS_LINES_ASYM, s = 0:TRANS_LOSS_SEGS, t = 1:T]>=0)

Comment on lines +246 to +247
sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS[l, t] for l in LOSS_LINES_SYM)
+ sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS_ASYM[l, t] for l in LOSS_LINES_ASYM))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS[l, t] for l in LOSS_LINES_SYM)
+ sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS_ASYM[l, t] for l in LOSS_LINES_ASYM))
sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS[l, t]
for l in LOSS_LINES_SYM)
+sum(abs(inputs["pNet_Map"][l, z]) * (1 / 2) * vTLOSS_ASYM[l, t]
for l in LOSS_LINES_ASYM))

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

JuliaFormatter

[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg2_asym[l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

inputs["pTrans_Max_Possible_Pos"][l] * (1 - vTAUX_POS_ON_ASYM[l, 1, t])


[JuliaFormatter] reported by reviewdog 🐶

inputs["pTrans_Max_Possible_Neg"][l] * (1 - vTAUX_NEG_ON_ASYM[l, 1, t])


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS)) +


[JuliaFormatter] reported by reviewdog 🐶

sum((2 * s - 1) * (inputs["pTrans_Max_Possible"][l] / TRANS_LOSS_SEGS) *
vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS)))


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_POS[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_POS[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

sum(vTAUX_NEG[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG[l, 0, t] ==


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderPos2[l in LOSS_LINES, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],


[JuliaFormatter] reported by reviewdog 🐶

cTAuxOrderNeg2[l in LOSS_LINES, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],

Comment on lines +280 to +282


if setup["asymmetrical_trans_flow_limit"] ==1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
if setup["asymmetrical_trans_flow_limit"] ==1
if setup["asymmetrical_trans_flow_limit"] == 1

Comment on lines +289 to +290
cMaxFlow_out_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] <= EP[:eAvail_Trans_Cap_Pos][l] #Change these with Auxiliary
cMaxFlow_in_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] >= -EP[:eAvail_Trans_Cap_Neg][l] #Change these with Auxiliary
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
cMaxFlow_out_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] <= EP[:eAvail_Trans_Cap_Pos][l] #Change these with Auxiliary
cMaxFlow_in_asym[l = 1:L_asym, t = 1:T], vFLOW[(l+L_sym), t] >= -EP[:eAvail_Trans_Cap_Neg][l] #Change these with Auxiliary
cMaxFlow_out_asym[l = 1:L_asym, t = 1:T],
vFLOW[(l + L_sym), t] <= EP[:eAvail_Trans_Cap_Pos][l] #Change these with Auxiliary
cMaxFlow_in_asym[l = 1:L_asym, t = 1:T],
vFLOW[(l + L_sym), t] >= -EP[:eAvail_Trans_Cap_Neg][l] #Change these with Auxiliary

Comment on lines 294 to 297
begin
cMaxFlow_out[l = 1:L, t = 1:T], vFLOW[l, t] <= EP[:eAvail_Trans_Cap][l]
cMaxFlow_in[l = 1:L, t = 1:T], vFLOW[l, t] >= -EP[:eAvail_Trans_Cap][l]
end)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
begin
cMaxFlow_out[l = 1:L, t = 1:T], vFLOW[l, t] <= EP[:eAvail_Trans_Cap][l]
cMaxFlow_in[l = 1:L, t = 1:T], vFLOW[l, t] >= -EP[:eAvail_Trans_Cap][l]
end)
begin
cMaxFlow_out[l = 1:L, t = 1:T], vFLOW[l, t] <= EP[:eAvail_Trans_Cap][l]
cMaxFlow_in[l = 1:L, t = 1:T], vFLOW[l, t] >= -EP[:eAvail_Trans_Cap][l]
end)

begin
cMaxFlow_out[l = 1:L, t = 1:T], vFLOW[l, t] <= EP[:eAvail_Trans_Cap][l]
cMaxFlow_in[l = 1:L, t = 1:T], vFLOW[l, t] >= -EP[:eAvail_Trans_Cap][l]
end)

end

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change

cTLoss[l in LOSS_LINES, t = 1:T],
vTLOSS[l, t] ==
inputs["pPercent_Loss"][l] * (vTAUX_POS[l, t] + vTAUX_NEG[l, t])
if setup["asymmetrical_trans_flow_limit"] ==1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
if setup["asymmetrical_trans_flow_limit"] ==1
if setup["asymmetrical_trans_flow_limit"] == 1

Comment on lines +564 to +565
sum(vTAUX_NEG_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG_ASYM[l, 0, t] ==
-vFLOW[(l+L_sym), t]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
sum(vTAUX_NEG_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS) - vTAUX_NEG_ASYM[l, 0, t] ==
-vFLOW[(l+L_sym), t]
sum(vTAUX_NEG_ASYM[l, s, t] for s in 1:TRANS_LOSS_SEGS) -
vTAUX_NEG_ASYM[l, 0, t] ==
-vFLOW[(l + L_sym), t]

cTAuxMaxPos_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
vTAUX_POS_ASYM[l, s, t] <=
(inputs["pTrans_Max_Possible_Pos"][l] / TRANS_LOSS_SEGS)
cTAuxMaxNeg_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
cTAuxMaxNeg_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
cTAuxMaxNeg_asym[
l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],

# (These constraints are necessary to prevents phantom losses in MILP problems)
@constraints(EP,
begin
cTAuxOrderPos1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
cTAuxOrderPos1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
cTAuxOrderPos1_asym[
l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],

vTAUX_POS_ASYM[l, s, t] <=
(inputs["pTrans_Max_Possible_Pos"][l] / TRANS_LOSS_SEGS) *
vTAUX_POS_ON_ASYM[l, s, t]
cTAuxOrderNeg1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
cTAuxOrderNeg1_asym[l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],
cTAuxOrderNeg1_asym[
l in LOSS_LINES_ASYM, s = 1:TRANS_LOSS_SEGS, t = 1:T],

vTAUX_NEG_ASYM[l, s, t] <=
(inputs["pTrans_Max_Possible_Neg"][l] / TRANS_LOSS_SEGS) *
vTAUX_NEG_ON_ASYM[l, s, t]
cTAuxOrderPos2_asym[l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
cTAuxOrderPos2_asym[l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],
cTAuxOrderPos2_asym[
l in LOSS_LINES_ASYM, s = 1:(TRANS_LOSS_SEGS - 1), t = 1:T],

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants